const Router = require('koa-router')
// 引入Roles数据库模块
const Roles = require('../../models/Roles')
// 引入Admins数据库模块
const Admins = require('../../models/Admins')
// 创建router
const rolesRouter = new Router()
/**
 * @route POST api/roles/create
 * @description 创建角色信息接口
 * @access      接口公开
 */
rolesRouter.post('/create',async(ctx) =>{
    // 操作数据库,查看是否有相同名字的角色
    const findData = await Roles.find({
        title:ctx.request.body.title
    })
    if(findData.length !== 0 ){
        ctx.status = 403
        ctx.body = {
            status: 403, 
            msg: '此名称的角色已存在'
        }
    }else{
        // 正确执行时,创建集合实例化数据
        const Role = new Roles({
            title:ctx.request.body.title,
            describe:ctx.request.body.describe,
        })
        // 保存到数据库之中
        Role.save()
        // 向客户端返回数据
        ctx.status = 200
        ctx.body = {
            status:ctx.status,
            success:true,
            data:{
                Role
            },
            msg:'新的角色信息创建成功'
        }
    }    
})
/**
 * @route GET api/roles/roleList
 * @description 返回全部角色信息
 * @access      接口公开
 */
rolesRouter.get('/roleList',async (ctx) =>{
    // 返回全部的角色数据
    const findData = await Roles.find({})
    ctx.body = {
        data:{
            findData
        },
        status:200,
        success:true,
        msg:'角色返回成功'
    }
})
/**
 * @route GET api/roles/rolePermissions
 * @description 返回指定角色的权限
 * @access      接口公开
 */
rolesRouter.get('/rolePermissions',async (ctx) =>{
    const _id = ctx.query.id
    // 操作数据库,获取角色信息
    const data = await Roles.findOne({ 
        _id
    })
    if(!data){
        ctx.status = 403
        ctx.body = {
            status:ctx.status,
            msg:'该角色不存在！',
            success:false
        }
    }else{
        ctx.body = {
            status:200,
            success:true,
            data:{
                permissions:data.permissions
            },
            message:"获取该角色权限成功"
        }
    }
})
/**
 * @route POST api/roles/distributePermission
 * @description 更新角色的权限列表
 * @access      接口公开
 */
rolesRouter.post('/distributePermission',async (ctx) =>{
    const _id = ctx.request.body.id
    const permissions = ctx.request.body.permissions
    // 操作数据库,获取角色信息
    const data = await Roles.findOne({ 
        _id
    })
    if(!data){
        ctx.status = 403
        ctx.body = {
            status:ctx.status,
            msg:'该角色不存在！',
            success:false
        }
    }else{
        // 获取更新后的权限标题
        const distributePermission = {permissions}
        // 定义所有权限的对象，根据不用的key返回不同的value
        const permissionsList = {
            "1":"storeRevenue",
            "2":"adminManage",
            "3":"roleList",
            "4":"permissionList",
            "5":"flowerManage",
            "6":"flowerType",
            "7":"userManage",
            // "7":"commodityOrderManage",
            "8":"UnshippedCommodityOrderManage",
            "9":"shippedCommodityOrderManage",
            "10":"completedCommodityOrderManage"
        }
        // 找到所有当前角色的管理员
        const findAdmin = await Admins.find({role:data.title})
        // 定义权限名称的数组
        const permissionArray = []
        // 对传过来的key进行遍历，向权限名称的数组中传入key所对应的value
        permissions.forEach(item =>{
            permissionArray.push(permissionsList[item])
        })
        // 对所有当前角色的管理员进行permissions属性赋值操作
        findAdmin.map(async (item) =>{
            item.permissions = permissionArray
            // 更新管理员数据库
            await Admins.findByIdAndUpdate(item._id,item)
        })
        // 存储到角色数据库
        await Roles.findByIdAndUpdate(_id,distributePermission)
        ctx.body = {
            status:200,
            success:true,
            data:{
                permissions:data.permissions
            },
            message:"更新角色权限成功"
        }
    }
})
module.exports = rolesRouter